#include<iostream>
using namespace std;
const int N = 50;
int f[N][N];//第i次传球后球落在这个j人手里的方案数
int n, m;
int main()
{
	cin >> n >> m;
	//传递m次之后这个球能够落在同一个人手中的方案数
	//对于一个人，可以是左边的人传给他的，也可以是右边的人传给他的
	//现在推导m次传球之后落在第一个人手里的方案数
	//经过分析，对于最后一个人来说第一次传球落在他手里的方案数为1
	//因为是两边加，一边是0，另一边就得是1
	f[0][1] = 1;
	for (int i = 1;i <= m;i++)
	{
		f[i][1] = f[i - 1][n] + f[i - 1][2];
		for (int j = 2;j < n;j++)
		{
			f[i][j] = f[i - 1][j - 1] + f[i - 1][j + 1];
		}
		f[i][n] = f[i - 1][n - 1] + f[i - 1][1];
	}
	cout << f[m][1] << endl;
	return 0;
}